#ifndef __ENCODER_H_
#define __ENCODER_H_

#include "main.h"

#define ENCODER_MAX_COUNT  2147483647   // int 最大值
#define ENCODER_MIN_COUNT -2147483648   // int 最小值

#define ENCODER_CIRCLE_PILSE    (520.0f)        // 轮子转一整圈，编码器获得的脉冲数 = 减速比 * 码盘线数 * 编码器脉冲（20*13*2）
#define STM32Car_APB            (145.0f)        //小车底盘电机间距之和的一半 170.5   159.0
#define MECANUM_CIRCLE_CM       (14.7262f)      //轮子转一整圈的位移，单位为厘米 14.7262cm 147.262 mm
#define Sampling_Interval_S     (0.04f)         //0.04s 40ms

typedef struct 
{
    int A_Last_Data;
    int A_Now_Data;
    int A_Err_Data;

    int D_Last_Data;
    int D_Now_Data;
    int D_Err_Data;
} EncoderData_Type;      //编码器数据 结构体变量


typedef struct 
{
    float Left_Speed;           //左轮速度
    float Right_Speed;          //右轮速度

    float Left_Distance;        //左轮行驶距离
    float Right_Distance;       //右轮行驶距离

    float Car_Speed;            //小车行驶速度
    float Car_Distance;         //小车行驶距离

    float Car_X_Speed;
    float Car_Y_Speed;
} Car_Type;              //小车数据 结构体变量


Car_Type CarData;

//编码器计数
extern volatile int Get_Encoder_CountA;
extern volatile int Get_Encoder_CountD;

extern EncoderData_Type EncoderData;    
extern EncoderData_Type *pEncoderData;  //声明指针变量

void Encoder_Init(void);            //编码器初始化
void Encoder_Caclulate(void);       //编码器计数
void Car_Data_Caclulate(void);      //小车数据计算

#endif





